$title IORUTINES FOR TDV 2124/2215      Date: 14/08-84
;
;       I/O port addresses
;
        IOBYTE  EQU     4       ;IOBYTE
        prnstat equ     0F5h    ;printer status
        prndata equ     0F4h    ;printer data
        scrstat equ     0f6h    ;screen status
        scrdata equ     0e5h    ;screen data
        kbstat  equ     0f6h    ;keyboard status
        kbdata  equ     0e6h    ;keyboard data
        PUNSTAT EQU     0F7H    ;PUNCH STATUS
        PUNDAT  EQU     0E4H    ;PUNCH DATA
        RDRSTAT EQU     0F7H    ;READER STATUS
        RDRDAT  EQU     0E4H    ;READER DATA
;
;
PUBLIC  CONST,CONIN,CONOUT,LIST,LISTST,PUNCH,READER
;
;----------------------------------------------------------------------
;
        cseg
;
const:  ;console status, return 0ffh if character ready, 00h if not
        LDA     IOBYTE
        RAR
        JNZ     IOST
        in      kbstat
        ani     4
        rz
        mvi     a,0ffh
        ret
;
conin:  ;console character into register a
        LDA     IOBYTE
        RAR
        JNZ     READER
C1:
        call    const
        ana     a
        jz      C1
        in      kbdata
        ani     7fh
        ret
;
conout: ;console character output from register c
        LDA     IOBYTE
        RAR
        JNZ     PUNCH
;       LDA     DLECNT
;       ANA     A
;       JNZ     DLEOUT
;       MOV     A,C
;       CPI     11H
;       JZ      DLESET
OUTC:
        mov     a,c
        out     scrdata ;write on screen with controll decoding
        NOP
        NOP
        in      scrstat ;read status
        ani     18h     ;screen busy during write
        jnz     OUTC    ;try again
        ret
;
;DLESET:
;       MVI     A,2
;       STA     DLECNT
;       MVI     C,10H
;       JMP     OUTC
;
;DLEOUT:
;       DCR     A
;       STA     DLECNT
;       MOV     A,C
;       SUI     20H
;       MOV     C,A
;       JMP     OUTC
;
 
list:   ;list character from register c
       call    listst
       ana     a
       jz      list    ;printer busy
       mov     a,c
       out     prndata ;print data
       ret             ;null subroutine
 
listst: ;return list status (0 if not ready, 1 if ready)
       in      prnstat ;printer status port
       rar
       jnc     listse  ;transmitter buffer not empty
       in      prnstat
       ral
       jnc     listse  ;printer busy
       mvi     a,001h  ;printer ready
       ret
;
listse:
        xra     a       ;printer busy
        ret
;
punch:  ;punch character from register c
        LDA     IOBYTE
        RAR
        RAR
        JNZ     CONOUT
P1:
        in      PUNSTAT
        ani     1
        jz      P1
        mov     a,c
        out     PUNDAT
        ret             ;null subroutine
;
reader: ;read character into register a from reader device
        LDA     IOBYTE
        RAR
        RAR
        JNZ     CONIN
R1:
        CALL    IOST
        ANA     A
        JZ      R1
        in      RDRDAT
        ani     7fh     ;remember to strip parity bit
        ret
;
IOST:
        IN      RDRSTAT
        ANI     2
        RZ
        MVI     A,0FFH
        RET
;
        END
